package com.chinatechstar.component.commons.exception;

/**
 * 返回结果异常枚举
 *
 * @author dyg
 * code 使用约定：
 * <p>
 * 20000 以内的 code 值框架保留使用，具体项目业务模块请从 20000 开始分配 code。
 * <p>
 * -1: 表示未知错误。
 * <p>
 * 0: 无错误，接口执行成功。
 * <p>
 * 1 - 100: 服务端直接向用户的友好提示， msg 携带的内容直接展示给用户，约定 100 代表 valid 注解 BindingResult 产生的错误提示。
 * <p>TokenUtil
 * 101 - 1000: 用于框架核心与业务无关的通用性错误, 此枚举类只枚举此类 CODE。
 * <p>
 * 1001 - 2000: 统一认证和权限管理模块。
 * <p>
 * 2001 - 3000: SQL 服务模块。
 * <p>
 * 3001 - 4000: 内容管理模块（文件管理，文章管理，excel 导入导出 和 云存储）。
 * <p>
 * 4001 - 5000: 消息模块（WebSocket模块，邮件模块，短信模块）。
 * <p>
 * 5001 - 6000: 任务调度模块。
 * <p>
 * 6001 - 7000: 全文检索。
 * <p>
 * 7001 - 8000: 会员系统。
 * <p>
 * 8001 - 9000: 工单系统。
 * <p>
 * 9001 - 10000: 工作流系统。
 * ......
 * <p>
 * 业务模块的 code 值从 20000 开始由项目自行分配。
 */
public enum AjaxExceptionEnum {
    // 100 - 199 用户相关
    TOKEN_DELETION(101, "TOKEN 缺失"),
    TOKEN_INVALID(102, "身份验证已失效，请重新登陆（TOKEN 无效）"),
    TOKEN_EXPIRED(103, "身份验证已过期，请重新登陆（TOKEN 已过期）"),
    USER_ID_IS_REQUIRED(109, "用户id 是必传参数"),
    USER_NOT_FIND(110, "未找到用户"),

    USER_PASSWORD_ERROR(111, "用户密码错误"),
    USER_INSUFFICIENT_PERMISSIONS(112, "用户权限不足"),
    USER_ACCOUNT_ALREADY_EXISTS(113, "用户账号已被注册"),
    USER_DISABLED(114, "用户已被禁用"),
    USER_PRINCIPAL_NOT_FIND(115, "未找到负责人"),
    USER_AUTHOR_NOT_FIND(115, "未找到编写人"),
    USER_REVIEWER_NOT_FIND(115, "未找到审核人"),

    TENANT_NOT_FIND(120, "未找到租户"),
    TENANT_EXPIRED(123, "租户已过期"),
    TENANT_DISABLED(124, "租户已被禁用"),

    ORG_ID_IS_REQUIRED(130, "组织机构id 是必传参数"),
    ORG_NOT_FIND(131, "未找到组织机构"),
    ORG_NAME_IS_REQUIRED(132, "组织机构名称 是必传参数"),
    ORG_ALREADY_EXISTS(133, "组织机构已经存在"),
    ORG_INSUFFICIENT_PERMISSIONS(134, "用户当前组织机构权限不足"),

    PROJECT_NOT_FIND(140, "未找到用户所属项目"),
    PROJECT_ALREADY_EXISTS(141, "此类型项目已经存在"),

    ONLY_SYSADMIN_ALLOWED(180, "此操作仅系统超级管理员可用"),

    // 200 - 300 参数相关
    VALID_RESULT_HAS_ERROR(200, "参数验证失败"),
    ID_IS_REQUIRED(201, "id 是必传参数"),
    PHONE_IS_REQUIRED(202, "id 是必传参数"),
    DATE_IS_MORE(203, "日期参数过大"),
    BUSINESS_ID_IS_REQUIRED(204, "业务id 是必传参数"),
    DATE_IS_NULL(205, "日期参数为空"),
    DATE_IS_INVALID(206, "日期参数非法"),
    TIME_IS_INVALID(207, "时间参数非法"),

    ENTITY_NOT_FIND(210, "未找到记录"),
    ENTITY_NOT_FIND_BY_ID(211, "未找到记录（BY ID）"),
    INTERNAL_ENTITY_NOT_FIND(212, "内部错误，未找到记录"),
    INTERNAL_ENTITY_NOT_FIND_ID(213, "内部错误，未找到记录ID"),
    DELETE_FAILED_FIND_REFER(220, "删除失败，此记录有关联数据"),

    // 301 - 400 参数相关
    COMPANY_NOT_FIND(301, "未找到公司记录"),
    DEPT_NOT_FIND(302, "未找到部门信息"),
    USER_EXIST_COMPANY_DEPT(303, "用户已存在此公司或部门"),
    PROJECTS_NOT_FIND(304, "未找到项目信息"),
    USER_EXIST_PROJECT_DEPT(305, "用户已存在此项目或部门"),

    UNKNOWN_ERROR(-1, "未知错误"),

    // 401 - 500 系统服务相关
    DATABASE_LINK_FAILURE(401, "数据库连接失败"),

    // 3001 - 4000: 内容管理模块（文件管理，文章管理，excel 导入导出 和 云存储）
    DIR_CREATE_FAILURE(3010, "目录创建失败"),
    DIR_ALREADY_EXISTS(3011, "目录已经存在"),
    DIR_NOT_FIND(3012, "未找到目录"),
    DIR_NAME_IS_REQUIRED(3013, "目录名称 是必传参数"),
    DIR_PATH_IS_REQUIRED(3014, "目录路径 是必传参数"),
    DIR_PATH_IS_SAME(3015, "目录路径 必须不同"),

    FILE_IS_REQUIRED(3020, "文件是必传参数"),
    FILE_NAME_IS_REQUIRED(3021, "目录名称 是必传参数"),
    FILE_PATH_IS_REQUIRED(3022, "目录路径名称 是必传参数"),

    DELETE_FAILED_FILE_REVIEW(3030, "删除失败，当前附件处于审核阶段"),
    DELETE_FAILED_FILE_SUCCESS(3031, "删除失败，当前附件已通过审核"),

    FILE_STORAGE_NOT_FIND(3040, "文件仓储未找到"),
    FILE_STORAGE_ID_IS_REQUIRED(3041, "文件仓储id 是必传参数"),
    FILE_STORAGE_NOT_FIND_BY_ID(3042, "文件仓储未找到（BY ID）"),

    // 9001 - 10000 工作流相关
    WORKFLOW_BUSINESS_NOT_FIND(9011, "未找到工作流关联的业务信息"),
    WORKFLOW_CATEGORY_NOT_FIND(9012, "未找到工作流关联的功能模块"),

    OPERATE_FAILED_WORKFLOW_REVIEW_OR_FINISHED(9020, "无法操作，当前业务处于审核阶段或已通过审核"),
    OPERATE_FAILED_WORKFLOW_REVIEW(9021, "无法操作，当前业务或附件处于审核阶段"),
    OPERATE_FAILED_WORKFLOW_FINISHED(9022, "无法操作，当前业务或附件已通过审核"),
    OPERATE_FAILED_FILES_WORKFLOW_REVIEW(9023, "无法操作，当前业务存在处于审核阶段的附件"),
    OPERATE_FAILED_FILES_WORKFLOW_FINISHED(9024, "无法操作，当前业务存在通过审核的附件"),

    // 20000 - 20030 井相关
    WELL_ID_IS_REQUIRED(20000, "井id 是必传参数"),
    WELL_NOT_FIND(20001, "井未找到（BY ID）"),
    WELL_ALREADY_EXISTS(20002, "井已经存在"),

    // 20031 - 20060 区块相关
    AREA_ID_IS_REQUIRED(20031, "区块id 是必传参数"),
    AREA_NOT_FIND(20032, "区块未找到（BY ID）"),
    AREA_PARENT_ID_IS_REQUIRED(20033, "区块父级id 是必传参数"),
    AREA_PARENT_NOT_FIND(20034, "区块父级未找到（BY ID）"),
    AREA_NAME_IS_REQUIRED(20035, "区块名称 是必传参数"),
    AREA_ALREADY_EXISTS(20036, "区块已经存在"),

    // 20061 - 20090 生产单位相关
    PROD_ORG_ID_IS_REQUIRED(20061, "生产单位id 是必传参数"),
    PROD_ORG_NOT_FIND(20062, "生产单位未找到（BY ID）"),
    PROD_ORG_NAME_IS_REQUIRED(20063, "生产单位名称 是必传参数"),
    PROD_ORG_ALREADY_EXISTS(20064, "生产单位已经存在"),

    // 20091 - 20100 A2相关
    A2_WELL_ID_IS_REQUIRED(20091, "A2井id 是必传参数"),
    A2_WELL_NOT_FIND(20092, "井未找到（BY A2 井ID）"),
    A2_WELL_NAME_IS_REQUIRED(20093, "A2井名称 是必传参数"),
    A2_PROD_DATE_INVALID(20094, "A2日产油日期错误"),

    // 20401 - 20410 用户自定义配置相关
    USER_CONFIG_CODE_ALREADY_EXISTED(20401, "code已经存在"),
    USER_CONFIG_CODE_IS_MUST(20402, "配置参数code是必须的"),
    USER_CONFIG_VALUE_IS_MUST(20403, "配置参数配置值是必须的"),

    // 20481 - 20500 施工记录相关
    CONSTR_GAS_ID_IS_REQUIRED(20481, "注气吞吐施工id 是必传参数"),
    CONSTR_GAS_NOT_FIND(20482, "注气吞吐施工未找到（BY ID）"),
    CONSTR_GAS_ALREADY_COMPLETED(20483, "注气吞吐施工已经完成"),
    CONSTR_GAS_UNDER_CONSTRUCTION(20484, "当前井处于注气吞吐施工状态中"),
    CONSTR_GAS_TYPE_IS_REQUIRED(20485, "注气吞吐施工注入方式 是必传参数"),
    CONSTR_RECORD_ID_IS_REQUIRED(20491, "注气吞吐施工记录id 是必传参数"),
    CONSTR_RECORD_NOT_FIND(20492, "注气吞吐施工记录未找到（BY ID）"),
    CONSTR_RECORD_ALREADY_EXISTS(20493, "注气吞吐施工记录已经存在"),
    CONSTR_RECORD_DATE_INVALID(20494, "注气吞吐施工记录日期错误"),
    CONSTR_RECORD_ACCUM_INVALID(20495, "注气吞吐施工记录累计注入量不可大于下一条或小于上一条数据"),
    CONSTR_RECORD_WELL_DATE_TIME_ALREADY_EXISTS(20496, "当前时间该井已经存在注气吞吐施工记录数据"),
    CONSTR_RECORD_EQT_DATE_TIME_ALREADY_EXISTS(20497, "当前时间该设备已经存在注气吞吐施工记录数据"),
    CONSTR_RECORD_MUST_HAVE_ONE(20498, "必须增加一条注气吞吐施工记录"),

    // 20501 - 20510 设备相关
    EQT_ID_IS_REQUIRED(20501, "设备id 是必传参数"),
    EQT_NOT_FIND(20502, "设备未找到（BY ID）"),
    EQT_ALREADY_EXISTS(20503, "设备已存在"),
    EQT_INJECTED_WELL_ALREADY_EXISTS(20506, "当前设备的在注井处于施工状态中"),
    EQT_INTRADAY_DATE_ALREADY_EXISTS(20507, "当前时间该设备已经存在当日注入情况数据"),
    EQT_NOT_WITH_INJECTED_WELL(20508, "当前设备未绑定在注井"),

    // 20511 - 20530 在注井或接替井相关
    INJECTED_WELL_ID_IS_REQUIRED(20511, "在注井id 是必传参数"),
    INJECTED_WELL_NOT_FIND(20512, "在注井未找到（BY ID）"),
    INJECTED_WELL_IS_INJECTED_WELL(20513, "当前井为在注井，正在施工"),
    INJECTED_WELL_NOT_INJECTED_WELL(20514, "当前井不是在注井"),
    INJECTED_WELL_ALREADY_COMPLETED(20515, "当前井已经完成注入"),
    INJECTED_WELL_ALREADY_INJECTED(20516, "当前井已经开始注入"),
    INJECTED_WELL_NOT_INJECTED(20517, "在注井未开始注入"),
    INJECTED_WELL_INJECT_DATE_IS_REQUIRED(20518, "在注井注入时间 是必填参数"),

    INJECT_WELL_ID_IS_REQUIRED(20521, "接替井id 是必传参数"),
    INJECT_WELL_NOT_FIND(20522, "接替井未找到（BY ID）"),
    INJECT_WELL_NOT_READY(20523, "接替井未准备完成"),

    // 20551 - 20560 注气吞吐实施年度
    IMPL_ANNUAL_ID_IS_REQUIRED(20551, "注气吞吐实施年度id 是必传参数"),
    IMPL_ANNUAL_NOT_FIND(20552, "注气吞吐实施年度未找到（BY ID）"),
    IMPL_ANNUAL_ALREADY_EXISTS(20553, "注气吞吐实施年度已经存在"),
    IMPL_ANNUAL_IMPL_YEAR_IS_REQUIRED(20554, "注气吞吐实施年度 是必传参数"),
    IMPL_ANNUAL_ACTUAL_YEAR_IS_REQUIRED(20555, "注气吞吐实际年度 是必传参数"),
    IMPL_ANNUAL_PROJECT_IS_REQUIRED(20555, "注气吞吐实施年度项目 是必传参数"),

    // 20561 - 20570 产量预警
    EARLY_WARNING_ID_IS_REQUIRED(20561, "产量预警id 是必传参数"),
    EARLY_WARNING_NOT_FIND(20562, "产量预警未找到（BY ID）"),
    EARLY_WARNING_ALREADY_EXISTS(20563, "产量预警已经存在"),
    EARLY_WARNING_DEFAULT_ALREADY_EXISTS(20564, "产量预警全局配置已经存在"),

    // 20571 - 20580 地质情况
    WELL_GEOLOGY_ID_IS_REQUIRED(20571, "地质情况id 是必传参数"),
    WELL_GEOLOGY_NOT_FIND(20572, "地质情况找到（BY ID）"),
    WELL_GEOLOGY_ALREADY_EXISTS(20573, "地质情况已经存在"),

    // 20581 - 20590 开发情况
    WELL_EXPLOIT_ID_IS_REQUIRED(20581, "开发情况id 是必传参数"),
    WELL_EXPLOIT_NOT_FIND(20582, "开发情况未找到（BY ID）"),
    WELL_EXPLOIT_ALREADY_EXISTS(20583, "开发情况已经存在"),

    // 20601 - 20650 注气吞吐实施
    WELL_IMPL_ID_IS_REQUIRED(20601, "注气吞吐实施id 是必传参数"),
    WELL_IMPL_NOT_FIND(20602, "注气吞吐实施未找到（BY ID）"),
    WELL_IMPL_ALREADY_EXISTS(20603, "注气吞吐实施已经存在"),

    // 20651 - 20700 注气吞吐效果
    WELL_EFFECT_ID_IS_REQUIRED(20651, "注气吞吐效果id 是必传参数"),
    WELL_EFFECT_NOT_FIND(20652, "注气吞吐效果未找到（BY ID）"),
    WELL_EFFECT_ALREADY_EXISTS(20653, "注气吞吐效果已经存在"),

    // 20701 - 20710 周报、月度例会
    REGULAR_MEETING_ID_IS_REQUIRED(20701, "周报、月度例会id 是必传参数"),
    REGULAR_MEETING_NOT_FIND(20702, "周报、月度例会未找到（BY ID）"),
    REGULAR_MEETING_ALREADY_EXISTS(20703, "周报、月度例会已经存在"),

    // 20801 - 20810 经济效益评价-自然月油价
    ECON_OIL_ID_IS_REQUIRED(20801, "自然月油价id 是必传参数"),
    ECON_OIL_NOT_FIND(20802, "自然月油价未找到（BY ID）"),
    ECON_OIL_ALREADY_EXISTS(20803, "自然月油价已经存在"),

    // 20811 - 20820 经济效益评价-自然月水处理成本
    ECON_WATER_ID_IS_REQUIRED(20811, "-自然月水处理成本id 是必传参数"),
    ECON_WATER_NOT_FIND(20812, "-自然月水处理成本未找到（BY ID）"),
    ECON_WATER_ALREADY_EXISTS(20813, "-自然月水处理成本已经存在"),

    //20901-21000 本地服务模块
    LOCAL_SERVICE_ACCOUNT_NULL(20501, "账号为空"),
    LOCAL_SERVICE_PASSWORD_NULL(20502, "密码为空"),
    LOCAL_SERVICE_ACCOUNT_NOT_FIND(20503, "未找到账户"),
    LOCAL_SERVICE_ACCOUNT_INFO_ERROR(20504, "账户信息错误"),
    LOCAL_SERVICE_PARAM_NOT_NULL(20505, "参数不能为空"),
    LOCAL_SERVICE_INFO_NOT_FIND(20506, "服务器信息未找到"),
    LOCAL_SERVICE_USER_NOT_FIND(20507, "未找到用户"),
    LOCAL_SERVICE_EQUIPMENT_NOT_FIND(20508, "未找到设备"),
    LOCAL_SERVICE_RECORD_INVALID(20509, "无效数据"),
    LOCAL_SERVICE_PARAM_ERROR(20510, "参数错误"),
    LOCAL_SERVICE_NOT_TODAY(20511, "非今日数据");

    // 返回值代码
    private final Integer code;

    // 返回信息
    private final String msg;

    AjaxExceptionEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}
